// 编写文章模块
const express = require('express')
const router = express.Router()
const moment = require('moment')
const { v4: uuidv4 } = require('uuid')
// 引入jwt token工具
const JwtUtil = require('../../utils/jwt')
const getCreateTime = require('../../utils/getCreateTime')
const config = require('../../config/default')
const HOSTURL = `${config.PROTOCOL}://${config.HOST}:${config.PORT}`
// 导入上传图片的包
const multer = require('multer');
// 通过 filename 属性定制
const storage = multer.diskStorage({
    // 保存的路径，备注：需要自己创建
    destination: function (req, file, callback) {
        callback(null, 'public/upload/article/');
    },
    filename: function (req, file, callback) {
        // 将保存文件名设置为 字段名 + 时间戳，比如 logo-1478521468943
        let suffix = file.mimetype.split('/')[1]; //获取文件格式
        callback(null, file.fieldname + '-' + Date.now() + '.' + suffix);
    }
});
//生成的图片放入uploads文件夹下
const upload = multer({ storage: storage })

// 导入文章数据模块
const articleModel = require('../../model/articleModel')
// 1.0 添加文章
router.post('/add',  upload.single('photo'), async (req, res) => {
    // 接收前端的文件
    let file = req.file 
    let article_src = `${HOSTURL}/upload/article/${file.filename}`//7文章封面
    let article_id = uuidv4()
    let article_title = req.body.article_title //1文章标题
    let article_text = req.body.article_text //2文章介绍
    let article_create_time = getCreateTime.now()//3文章创建时间
    let article_tags = req.body.article_tags//4文章标签
    let article_author = req.body.article_author//5文章作者
    let article_navigate = req.body.article_navigate//6文章分类
    let article_content = req.body.article_content//8文章内容
    let token = req.body.token
    // console.log("token-->",token)
    // console.log("req.body-->",req.body)
    // 请求需要进行token校验 
    let jwt = new JwtUtil(token)
    // 返回一个对象 
    let result = jwt.verifyToken()
    // 验通过执行下一步，否则就返回登陆信息不正确
    if (result == 'err') {
        res.send({
            code: -1,
            msg: '登录已过期,请重新登录。'
        });
    }
    else {
        let user_id = result.data;
        // console.log({article_id, article_title, article_text, article_create_time, article_tags, article_author, article_navigate, article_src, article_content, user_id})
        // 调用添加文章的方法
        // article_id, article_title, article_text, article_create_time, article_tags, article_author, article_navigate, article_src, article_content, user_id
        await articleModel.add(article_id, article_title, article_text, article_create_time, article_tags, article_author, article_navigate, article_src, article_content, user_id)
            .then(
                data => {
                    res.send(data)
                }
            )
            .catch(
                err => {
                    res.send({ code: 500, msg: '服务器异常...', err })
                }
            )
    }

})
// 2.0 删除文章
router.post('/remove', async (req, res) => {
    let article_id = req.body.article_id
    let token = req.body.token
    // 请求需要进行token校验 
    let jwt = new JwtUtil(token)
    // 返回一个对象 
    let result = jwt.verifyToken()
    // 验通过执行下一步，否则就返回登陆信息不正确
    if (result == 'err') {
        res.send({
            code: -1,
            msg: '登录已过期,请重新登录。'
        });
    } else {
        if (result.data) {
            // 调用删除文章方法
            await articleModel.remove(article_id)
                .then(
                    data => {
                        res.send(data)
                    }
                )
                .catch(
                    err => {
                        res.send({ code: 500, msg: '服务器异常...', err })
                    }
                )
        }
    }
})
// 3.0 查获取全部文章列表
router.get('/list', async (req, res) => {
    // 调用获取文章列表方法
    await articleModel.list()
        .then(
            data => {
                res.send(data)
            }
        )
        .catch(
            err => {
                res.send({ code: 500, msg: '服务器异常...', err })
            }
        )
})
// 4.0 获取分页文章列表
router.get('/items', async (req, res) => {
    const page_num = req.query.page_num //当前的页码
    const page_size = req.query.page_size //当前页的数量
    // 调用获取分页内容列表
    await articleModel.items(page_num, page_size)
        .then(
            data => {
                res.send(data)
            }
        )
        .catch(
            err => {
                res.send({ code: 500, msg: '服务器异常...', err })
            }
        )
})
// 5.0 查看文章详情
router.get('/detail', async (req, res) => {
    let article_id = req.query.article_id
    // 调用获取文章详情方法
    await articleModel.detail(article_id)
        .then(
            data => {
                res.send(data)
            }
        )
        .catch(
            err => {
                res.send({ code: 500, msg: '服务器异常...', err })
            }
        )
})
// 6.0 更新文章
router.post('/update', upload.single('photo'),  async (req, res) => {
    // 接收前端的文件
    let file = req.file 
    let article_src = ''
    if(file){
        article_src =  `${HOSTURL}/upload/article/${file.filename}`//7文章封面
    }
    let article_id = req.body.article_id
    let article_title = req.body.article_title
    let article_text = req.body.article_text
    let article_create_time = getCreateTime.now()//3文章创建时间
    let article_tags = req.body.article_tags
    let article_author = req.body.article_author
    let article_navigate = req.body.article_navigate
    let article_content = req.body.article_content
    // console.log({article_id, article_title, article_text, article_create_time, article_tags, article_author, article_navigate, article_src,article_content})
    // 调用更新文章的方法
    // article_id,article_title,article_text,article_create_time,article_tags,article_author,article_navigate,article_src
    // 调用获取文章详情方法
    await articleModel.update(article_id, article_title, article_text, article_create_time, article_tags, article_author, article_navigate, article_src,article_content)
        .then(
            data => {
                res.send(data)
            }
        )
        .catch(
            err => {
                res.send({ code: 500, msg: '服务器异常...', err })
            }
        )
})

// 7.0 上传文章图片
router.post('/upload', upload.single('photo'), async (req, res) => {
    // 接收前端的文件
    let file = req.file
    // 定义存在在服务器的图片的路径（存在数据库的路径）
    let article_img_src = `${HOSTURL}/upload/article/${file.filename}`
    // 生成图片ID
    let article_img_id = uuidv4()
    // let token = req.body.token
    // // 请求需要进行token校验 
    // let jwt = new JwtUtil(token)
    // // 返回一个对象 
    // let result = jwt.verifyToken()
    // // 验通过执行下一步，否则就返回登陆信息不正确
    // if (result == 'err') {
    //     res.send({
    //         code: -1,
    //         msg: '登录已过期,请重新登录。'
    //     });
    // }
    // 调用获取文章详情方法
    await articleModel.upload(article_img_id, article_img_src)
        .then(
            data => {
                res.send(data)
            }
        )
        .catch(
            err => {
                res.send({ code: 500, msg: '服务器异常...', err })
            }
        )

})
// 8.0 删除文章图片
router.post('/delete', async (req, res) => {
    let article_img_id = req.body.article_img_id;
    // 调用删除文章图片方法
    await articleModel.delete(article_img_id)
        .then(
            data => {
                res.send(data)
            }
        )
        .catch(
            err => {
                res.send({ code: 500, msg: '服务器异常...', err })
            }
        )
})

// 9.0 统计文章数量
router.get('/all', async (req, res) => {
    // 调用获取分页内容列表
    await articleModel.all()
        .then(
            data => {
                res.send(data)
            }
        )
        .catch(
            err => {
                res.send({ code: 500, msg: '服务器异常...', err })
            }
        )
})
module.exports = router;
